'use strict';
const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class Category extends Model { //分类表，一个分类对应多个课程
    /**
     * Helper method for defining associations.
     * This method is not a part of Sequelize lifecycle.
     * The `models/index` file will call this method automatically.
     */
    static associate(models) {
      models.Category.hasMany(models.Course,{as:'courses'})
    }
  }
  Category.init({
    name: {
      type:DataTypes.STRING,
      allowNull:false,
      validate:{
        notNull:{msg:'名称必须填写'},
        notEmpty:{msg:'名称不能为空'},
        len:{args:[2,45],msg:'长度必须是2-45之间'},
        // 自定义验证，保证分类唯一性
        async isUnique(value){
          const category = await Category.findOne({where:{name:value}})
          if(category){
            throw new Error('分类已存在')
          }
        }
      }
    },
    rank: {
      type:DataTypes.INTEGER,
      allowNull:false,
      validate:{
        notNull:{msg:'排序必须填写'},
        notEmpty:{msg:'排序不能为空'},
        isInt:{msg:'排序必须为整数'},
        isPositive(value){//自定义验证函数，接收一个值为字段值
          if(value <= 0){
            throw new Error("排序必须为正整数");
          }
        }
      }
    }
  }, {
    sequelize,
    modelName: 'Category',
  });
  return Category;
};